import { PointerEventInfo } from '../../core/types.ts';
import { EventDispatcher, Vector2 } from 'three';
import { EventMap } from '../events.ts';
import { STATE } from '../handlers/oribits/OrbitControls.ts';


export function dom2GLPosition({ offsetX, offsetY }: PointerEventInfo, width: number, height: number,) {
  const x = offsetX / width * 2 - 1,
    y = -offsetY / height * 2 + 1;
  return new Vector2(x, y)
}
type PointerId = number
/**
 * ui状态类
 */
export class UIState extends EventDispatcher<EventMap> {
  constructor() {
    super()
  }
  /**
   * 画布宽度
   */
  width: number = 1
  /**
   * 画布高度
   *
   */
  height: number = 1
  ctrlKey = false
  shiftKey = false
  altKey = false
  metaKey = false
  /**
   * 有关触点的储存信息
   * 当是触点时类型时,可能有多个触点
   * 
   */
  pointerPosition: Array<[PointerId, Vector2]> = []
  get pointerMap() {
    return new Map(this.pointerPosition)
  }


  eventType: string = ''
  /**
    * 当前已经按住的鼠标键
    */
  pointerDownButton = STATE.NONE
  /**
   * 当前指针类型
   */
  pointerType?: string
  /**
   * 当前已经按下的键盘代码
   */
  keyDownCode: Set<string> = new Set<string>()
  /**
  *  鼠标最后一次按下的位置,已经被归一化的坐标
  * 
  */
  downNormalizedXOY = new Vector2()
  /**
   * 鼠标按下时的位置,原始坐标
   */
  downdOriginalXOY = new Vector2()
  /**
   * 触点/鼠标/笔的抬起位置,已经被归一化的坐标
   */
  upNormalizedXOY = new Vector2()
  /**
   * 触点/鼠标/笔的抬起位置,原始坐标
   */
  upOringinalXOY = new Vector2()
  /**
   * 鼠标当前位置信息
   */
  /**
   * 鼠标当前位置,原始坐标
   */
  currentOriginalXOY = new Vector2()
  /**
    * 当前鼠标位置,坐标已被归一化
    * 该值主要用于射线
    */
  currentNormalizedXOY = new Vector2()


  /**
   * 鼠标滚动偏移量
   */
  wheelEventDeltaY = 0
  /**
   * 最后一次鼠标滚动模式
   */
  whellEventModel = 0
  
}
